package com.swyc.osschat.Test.designMode.iterator.run;

import com.swyc.osschat.Test.designMode.iterator.base.Iterator;
import com.swyc.osschat.Test.designMode.iterator.impl.ObjectAggregate;

/**
 * @description Java 迭代器模式
 * 一、概述
 *      提供一个对象来顺序访问聚合对象中的一系列数据，而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式。
 *  主要角色：
 *      抽象聚合角色：定义存储、添加、删除聚合对象以及创建迭代器对象的接口。
 *      具体聚合角色：实现抽象聚合类，返回一个具体迭代器的实例。
 *      抽象迭代器角色：定义访问和遍历聚合元素的接口，通常包含 hasNext()、first()、next() 等方法。
 *      具体迭代器角色：实现抽象迭代器接口中所定义的方法，完成对聚合对象的遍历，记录遍历的当前位置。
 * 二、代码实现
 *      举例：定义一个存储对象的容器对象，将遍历该容器的功能交由迭代器实现，来看代码：
 * 三、总结
 *  优点：
 *      1.访问一个聚合对象的内容而无须暴露它的内部表示。
 *      2.遍历任务交由迭代器完成，这简化了聚合类。
 *      3.它支持以不同方式遍历一个聚合，甚至可以自定义迭代器的子类以支持新的遍历。
 *      4.增加新的聚合类和迭代器类都很方便，无须修改原有代码。
 *      5.封装性良好，为遍历不同的聚合结构提供一个统一的接口。
 *  缺点：
 *      会增加类的数量，一定程度上增加了程序的复杂性
 *  使用场景：
 *      1.当需要为聚合对象提供多种遍历方式时。
 *      2.当需要为遍历不同的聚合结构提供一个统一的接口时。
 *      3.当访问一个聚合对象的内容而无须暴露其内部细节的表示时。
 * @Author: z156940l@outlook.com
 * @className test
 * @Date: 2022/6/28 8:46
 */
public class Test {

    public static void main(String[] args) {
        //创建聚合对象
        ObjectAggregate objectAggregate = new ObjectAggregate();
        //在聚合对象中填充数据
        objectAggregate.addObject("我是伞兵一号");
        objectAggregate.addObject("我是伞兵二号");
        objectAggregate.addObject("我是伞兵三号");
        //获取迭代器
        Iterator iterator = objectAggregate.getIterator();
        //通过迭代器迭代数据
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}
